/**
 * 教师服务API
 * 提供教师、课程、订单、用户课程、分类管理等相关接口
 * @author WeChat Mini Program Team
 * @since 2025-08-13
 */

const Request = require('./request');

class TeacherService {
  constructor() {
    this.service = 'teacher';
  }

  /**
   * 状态映射：将字符串状态转换为整数
   * @param {string} status - 状态字符串
   * @returns {number} 状态整数值
   */
  mapStatusToInt(status) {
    const statusMap = {
      'active': 1,
      'inactive': 0,
      'pending': 2,
      'cancelled': 3
    };
    return statusMap[status] !== undefined ? statusMap[status] : status;
  }

  // ==================== 教师管理 ====================

  /**
   * 注册教师
   * @param {Object} teacherData 教师数据
   * @param {number} teacherData.user_id 关联用户ID
   * @param {string} teacherData.name 教师姓名
   * @param {string} teacherData.email 邮箱
   * @param {string} teacherData.phone 手机�?   * @param {string} teacherData.certificate 资格证书
   * @param {string} teacherData.experience 教学经验
   * @param {string} teacherData.bio 个人简�?   * @param {string} teacherData.avatar 头像URL
   * @returns {Promise<Object>} 注册结果
   */
  async registerTeacher(teacherData) {
    return Request.post('/teachers', teacherData, {
      service: this.service,
      showLoading: true,
      loadingText: '注册�?..'
    });
  }

  /**
   * 获取教师详情
   * @param {number} teacherId 教师ID
   * @returns {Promise<Object>} 教师详情
   */
  async getTeacherDetail(teacherId) {
    return Request.get(`/teachers/${teacherId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取教师列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.name 教师姓名筛�?   * @param {number} params.category_id 分类ID筛�?   * @param {number} params.status 状态筛�?   * @returns {Promise<Object>} 教师列表
   */
  async getTeacherList(params = {}) {
    // 转换状态参数
    const convertedParams = { ...params };
    if (convertedParams.status !== undefined) {
      convertedParams.status = this.mapStatusToInt(convertedParams.status);
    }

    return Request.get('/teachers', convertedParams, {
      service: this.service
    });
  }

  /**
   * 更新教师信息
   * @param {number} teacherId 教师ID
   * @param {Object} teacherData 教师数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateTeacher(teacherId, teacherData) {
    return Request.put(`/teachers/${teacherId}`, teacherData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新�?..'
    });
  }

  /**
   * 删除教师
   * @param {number} teacherId 教师ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteTeacher(teacherId) {
    return Request.delete(`/teachers/${teacherId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除�?..'
    });
  }

  /**
   * 获取教师统计数据
   * @param {number} teacherId 教师ID
   * @returns {Promise<Object>} 教师统计数据
   */
  async getTeacherStats(teacherId) {
    return Request.get(`/teachers/${teacherId}/stats`, {}, {
      service: this.service
    });
  }

  // ==================== 教师申请管理 ====================

  /**
   * 提交教师申请
   * @param {Object} applicationData 申请数据
   * @param {number} applicationData.user_id 关联用户ID
   * @param {string} applicationData.name 教师姓名
   * @param {string} applicationData.email 邮箱
   * @param {string} applicationData.phone 手机�?   * @param {string} applicationData.certificate 资格证书
   * @param {string} applicationData.category_ids 申请分类ID
   * @param {string} applicationData.experience 教学经验
   * @param {string} applicationData.bio 个人简�?   * @param {string} applicationData.reason 申请理由
   * @returns {Promise<Object>} 申请结果
   */
  async applyTeacher(applicationData) {
    return Request.post('/teachers/apply', applicationData, {
      service: this.service,
      showLoading: true,
      loadingText: '申请�?..'
    });
  }

  /**
   * 获取教师申请详情
   * @param {number} applicationId 申请ID
   * @returns {Promise<Object>} 申请详情
   */
  async getTeacherApplication(applicationId) {
    return Request.get(`/teachers/applications/${applicationId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取教师申请列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 申请列表
   */
  async getTeacherApplications(params = {}) {
    return Request.get('/teachers/applications', params, {
      service: this.service
    });
  }

  /**
   * 获取申请列表 (别名方法)
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 申请列表
   */
  async getApplications(params = {}) {
    return this.getTeacherApplications(params);
  }

  /**
   * 审核教师申请
   * @param {number} applicationId 申请ID
   * @param {Object} reviewData 审核数据
   * @param {string} reviewData.status 审核状�?   * @param {string} reviewData.remark 审核备注
   * @returns {Promise<Object>} 审核结果
   */
  async reviewTeacherApplication(applicationId, reviewData) {
    return Request.put(`/teachers/applications/${applicationId}`, reviewData, {
      service: this.service,
      showLoading: true,
      loadingText: '审核�?..'
    });
  }

  /**
   * 审核申请 (别名方法)
   * @param {number} applicationId 申请ID
   * @param {Object} reviewData 审核数据
   * @returns {Promise<Object>} 审核结果
   */
  async reviewApplication(applicationId, reviewData) {
    return this.reviewTeacherApplication(applicationId, reviewData);
  }

  // ==================== 课程管理 ====================

  /**
   * 创建课程
   * @param {Object} courseData 课程数据
   * @param {string} courseData.title 课程标题
   * @param {string} courseData.description 课程描述
   * @param {number} courseData.price 课程价格
   * @param {number} courseData.duration 课程时长
   * @param {number} courseData.category_id 分类ID
   * @param {number} courseData.teacher_id 教师ID
   * @param {string} courseData.level 课程级别
   * @param {string} courseData.tags 标签
   * @param {string} courseData.thumbnail 缩略图URL
   * @returns {Promise<Object>} 创建结果
   */
  async createCourse(courseData) {
    return Request.post('/courses', courseData, {
      service: this.service,
      showLoading: true,
      loadingText: '创建�?..'
    });
  }

  /**
   * 获取课程详情
   * @param {number} courseId 课程ID
   * @returns {Promise<Object>} 课程详情
   */
  async getCourseDetail(courseId) {
    return Request.get(`/courses/${courseId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取课程列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.title 课程标题筛�?   * @param {number} params.category_id 分类ID筛�?   * @param {number} params.teacher_id 教师ID筛�?   * @param {string} params.level 级别筛�?   * @param {number} params.min_price 最低价�?   * @param {number} params.max_price 最高价�?   * @param {string} params.status 状态筛�?   * @returns {Promise<Object>} 课程列表
   */
  async getCourseList(params = {}) {
    // 转换状态参数
    const convertedParams = { ...params };
    if (convertedParams.status !== undefined) {
      convertedParams.status = this.mapStatusToInt(convertedParams.status);
    }

    return Request.get('/courses', convertedParams, {
      service: this.service
    });
  }

  /**
   * 更新课程信息
   * @param {number} courseId 课程ID
   * @param {Object} courseData 课程数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateCourse(courseId, courseData) {
    return Request.put(`/courses/${courseId}`, courseData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新�?..'
    });
  }

  /**
   * 删除课程
   * @param {number} courseId 课程ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteCourse(courseId) {
    return Request.delete(`/courses/${courseId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除�?..'
    });
  }

  /**
   * 获取课程统计数据
   * @param {number} courseId 课程ID
   * @returns {Promise<Object>} 课程统计数据
   */
  async getCourseStats(courseId) {
    return Request.get(`/courses/${courseId}/stats`, {}, {
      service: this.service
    });
  }

  /**
   * 获取教师的课�?   * @param {number} teacherId 教师ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 教师课程列表
   */
  async getTeacherCourses(teacherId, params = {}) {
    // 转换状态参数
    const convertedParams = { ...params };
    if (convertedParams.status !== undefined) {
      convertedParams.status = this.mapStatusToInt(convertedParams.status);
    }

    return Request.get(`/courses/teacher/${teacherId}`, convertedParams, {
      service: this.service
    });
  }

  /**
   * 获取推荐教师列表（首页用�?   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 推荐教师列表
   */
  async getRecommendTeachers(params = { page: 1, limit: 5 }) {
    return this.getTeacherList(params);
  }

  /**
   * 获取热门课程列表（首页用�?   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 热门课程列表
   */
  async getPopularCourses(params = { page: 1, limit: 5 }) {
    return this.getCourseList(params);
  }

  /**
   * 获取分类的课�?   * @param {number} categoryId 分类ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 分类课程列表
   */
  async getCategoryCourses(categoryId, params = {}) {
    return Request.get(`/courses/category/${categoryId}`, params, {
      service: this.service
    });
  }

  // ==================== 订单管理 ====================

  /**
   * 创建订单
   * @param {Object} orderData 订单数据
   * @param {number} orderData.user_id 用户ID
   * @param {number} orderData.course_id 课程ID
   * @param {number} orderData.amount 订单金额
   * @param {string} orderData.remark 订单备注
   * @returns {Promise<Object>} 创建结果
   */
  async createOrder(orderData) {
    return Request.post('/orders', orderData, {
      service: this.service,
      showLoading: true,
      loadingText: '创建订单�?..'
    });
  }

  /**
   * 获取订单详情
   * @param {number} orderId 订单ID
   * @returns {Promise<Object>} 订单详情
   */
  async getOrderDetail(orderId) {
    return Request.get(`/orders/${orderId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取订单列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 订单列表
   */
  async getOrderList(params = {}) {
    return Request.get('/orders', params, {
      service: this.service
    });
  }

  /**
   * 获取订单列表 (别名方法)
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 订单列表
   */
  async getOrders(params = {}) {
    return this.getOrderList(params);
  }

  /**
   * 更新订单状�?   * @param {number} orderId 订单ID
   * @param {Object} statusData 状态数�?   * @param {string} statusData.status 订单状�?   * @param {string} statusData.remark 状态更新备�?   * @returns {Promise<Object>} 更新结果
   */
  async updateOrderStatus(orderId, statusData) {
    return Request.put(`/orders/${orderId}`, statusData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新�?..'
    });
  }

  /**
   * 支付订单
   * @param {number} orderId 订单ID
   * @returns {Promise<Object>} 支付结果
   */
  async payOrder(orderId) {
    return Request.post(`/orders/${orderId}/pay`, {}, {
      service: this.service,
      showLoading: true,
      loadingText: '支付�?..'
    });
  }

  /**
   * 取消订单
   * @param {number} orderId 订单ID
   * @returns {Promise<Object>} 取消结果
   */
  async cancelOrder(orderId) {
    return Request.post(`/orders/${orderId}/cancel`, {}, {
      service: this.service,
      showLoading: true,
      loadingText: '取消�?..'
    });
  }

  /**
   * 退款订�?   * @param {number} orderId 订单ID
   * @returns {Promise<Object>} 退款结�?   */
  async refundOrder(orderId) {
    return Request.post(`/orders/${orderId}/refund`, {}, {
      service: this.service,
      showLoading: true,
      loadingText: '退款中...'
    });
  }

  /**
   * 获取用户订单
   * @param {number} userId 用户ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户订单列表
   */
  async getUserOrders(userId, params = {}) {
    return Request.get(`/orders/user/${userId}`, params, {
      service: this.service
    });
  }

  /**
   * 根据订单号获取订�?   * @param {string} orderNumber 订单�?   * @returns {Promise<Object>} 订单详情
   */
  async getOrderByNumber(orderNumber) {
    return Request.get(`/orders/no/${orderNumber}`, {}, {
      service: this.service
    });
  }

  // ==================== 用户课程管理 ====================

  /**
   * 注册用户课程
   * @param {Object} userCourseData 用户课程数据
   * @param {number} userCourseData.user_id 用户ID
   * @param {number} userCourseData.course_id 课程ID
   * @param {number} userCourseData.order_id 订单ID
   * @returns {Promise<Object>} 注册结果
   */
  async registerUserCourse(userCourseData) {
    return Request.post('/user-courses', userCourseData, {
      service: this.service,
      showLoading: true,
      loadingText: '注册课程�?..'
    });
  }

  /**
   * 获取用户课程详情
   * @param {number} userCourseId 用户课程ID
   * @returns {Promise<Object>} 用户课程详情
   */
  async getUserCourseDetail(userCourseId) {
    return Request.get(`/user-courses/${userCourseId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取用户课程列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 用户课程列表
   */
  async getUserCourseList(params = {}) {
    return Request.get('/user-courses', params, {
      service: this.service
    });
  }

  /**
   * 获取用户课程列表 (别名方法，与上面方法功能相同)
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户课程列表
   */
  async getUserCourses(params = {}) {
    return this.getUserCourseList(params);
  }

  /**
   * 更新学习进度
   * @param {number} userCourseId 用户课程ID
   * @param {Object} progressData 进度数据
   * @param {number} progressData.progress 学习进度
   * @param {number} progressData.last_lesson 最后学习课�?   * @returns {Promise<Object>} 更新结果
   */
  async updateLearningProgress(userCourseId, progressData) {
    return Request.put(`/user-courses/${userCourseId}/progress`, progressData, {
      service: this.service
    });
  }

  /**
   * 完成课程学习
   * @param {number} userCourseId 用户课程ID
   * @returns {Promise<Object>} 完成结果
   */
  async completeCourse(userCourseId) {
    return Request.post(`/user-courses/${userCourseId}/complete`, {}, {
      service: this.service,
      showLoading: true,
      loadingText: '完成课程�?..'
    });
  }

  /**
   * 获取课程的用户列�?   * @param {number} courseId 课程ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 课程用户列表
   */
  async getCourseUsers(courseId, params = {}) {
    return Request.get(`/user-courses/course/${courseId}`, params, {
      service: this.service
    });
  }

  /**
   * 获取用户学习统计
   * @param {number} userId 用户ID
   * @returns {Promise<Object>} 用户学习统计
   */
  async getUserLearningStats(userId) {
    return Request.get(`/user-courses/stats/user/${userId}`, {}, {
      service: this.service
    });
  }

  // ==================== 分类管理 ====================

  /**
   * 创建分类
   * @param {Object} categoryData 分类数据
   * @param {string} categoryData.name 分类名称
   * @param {string} categoryData.description 分类描述
   * @param {number} categoryData.parent_id 父分类ID
   * @param {number} categoryData.sort 排序�?   * @returns {Promise<Object>} 创建结果
   */
  async createCategory(categoryData) {
    return Request.post('/categories', categoryData, {
      service: this.service,
      showLoading: true,
      loadingText: '创建�?..'
    });
  }

  /**
   * 获取分类详情
   * @param {number} categoryId 分类ID
   * @returns {Promise<Object>} 分类详情
   */
  async getCategoryDetail(categoryId) {
    return Request.get(`/categories/${categoryId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取分类列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 分类列表
   */
  async getCategoryList(params = {}) {
    return Request.get('/categories', params, {
      service: this.service
    });
  }

  /**
   * 获取分类列表 (别名方法)
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 分类列表
   */
  async getCategories(params = {}) {
    return this.getCategoryList(params);
  }

  /**
   * 更新分类信息
   * @param {number} categoryId 分类ID
   * @param {Object} categoryData 分类数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateCategory(categoryId, categoryData) {
    return Request.put(`/categories/${categoryId}`, categoryData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新�?..'
    });
  }

  /**
   * 删除分类
   * @param {number} categoryId 分类ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteCategory(categoryId) {
    return Request.delete(`/categories/${categoryId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除�?..'
    });
  }

  /**
   * 获取子分�?   * @param {number} parentId 父分类ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 子分类列�?   */
  async getChildCategories(parentId, params = {}) {
    return Request.get(`/categories/parent/${parentId}`, params, {
      service: this.service
    });
  }

  /**
   * 获取根分�?   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 根分类列�?   */
  async getRootCategories(params = {}) {
    return Request.get('/categories/root', params, {
      service: this.service
    });
  }

  /**
   * 获取推荐教师列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 推荐教师列表
   */
  async getRecommendTeachers(params = {}) {
    return Request.get('/teachers/recommend', params, {
      service: this.service
    });
  }

  /**
   * 获取热门课程列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 热门课程列表
   */
  async getPopularCourses(params = {}) {
    return Request.get('/courses/popular', params, {
      service: this.service
    });
  }

  /**
   * 获取教师的课�?
   * @param {number} teacherId 教师ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 教师课程列表
   */
  async getTeacherCourses(teacherId, params = {}) {
    return Request.get(`/courses/teacher/${teacherId}`, params, {
      service: this.service
    });
  }

  /**
   * 关注/取消关注教师
   * @param {number} teacherId 教师ID
   * @param {string} action 操作类型 follow/unfollow
   * @returns {Promise<Object>} 操作结果
   */
  async followTeacher(teacherId, action = 'follow') {
    return Request.post(`/teachers/${teacherId}/follow`, { action }, {
      service: this.service,
      showLoading: true,
      loadingText: action === 'follow' ? '关注�?..' : '取消关注�?..'
    });
  }

  /**
   * 获取用户创建的课�?   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户创建的课程列�?   */
  async getUserCreatedCourses(params = {}) {
    return Request.get('/user-courses/created', params, {
      service: this.service
    });
  }

  /**
   * 获取用户参加的课�?   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户参加的课程列�?   */
  async getUserEnrolledCourses(params = {}) {
    return Request.get('/user-courses/enrolled', params, {
      service: this.service
    });
  }

  /**
   * 获取用户学习统计
   * @returns {Promise<Object>} 用户学习统计数据
   */
  async getUserLearningStats() {
    return Request.get('/teachers/user-learning/stats', {}, {
      service: this.service
    });
  }

  /**
   * 获取用户学习课程列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户学习课程列表
   */
  async getUserLearningCourses(params = {}) {
    return Request.get('/teachers/user-learning/courses', params, {
      service: this.service
    });
  }

  /**
   * 获取用户订单列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户订单列表
   */
  async getUserOrders(params = {}) {
    return Request.get('/teachers/user-orders', params, {
      service: this.service
    });
  }

  /**
   * 获取订单详情
   * @param {number} orderId 订单ID
   * @returns {Promise<Object>} 订单详情
   */
  async getOrderDetail(orderId) {
    return Request.get(`/orders/${orderId}`, {}, {
      service: this.service
    });
  }

  /**
   * 取消订单
   * @param {number} orderId 订单ID
   * @param {string} reason 取消原因
   * @returns {Promise<Object>} 取消结果
   */
  async cancelOrder(orderId, reason = '') {
    return Request.post(`/orders/${orderId}/cancel`, { reason }, {
      service: this.service,
      showLoading: true,
      loadingText: '取消�?..'
    });
  }

  /**
   * 申请退�?   * @param {number} orderId 订单ID
   * @param {string} reason 退款原�?   * @returns {Promise<Object>} 退款申请结�?   */
  async requestRefund(orderId, reason = '') {
    return Request.post(`/orders/${orderId}/refund`, { reason }, {
      service: this.service,
      showLoading: true,
      loadingText: '申请�?..'
    });
  }

  /**
   * 获取用户统计数据
   * @returns {Promise<Object>} 用户统计数据
   */
  async getUserStats() {
    return Request.get('/teachers/user-stats', {}, {
      service: this.service
    });
  }

  /**
   * 获取用户申请列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 用户申请列表
   */
  async getUserApplications(params = {}) {
    return Request.get('/teachers/user-applications', params, {
      service: this.service
    });
  }

  /**
   * 提交教师申请
   * @param {Object} data 申请数据
   * @returns {Promise<Object>} 申请结果
   */
  async submitTeacherApplication(data) {
    return Request.post('/teachers/applications', data, {
      service: this.service,
      showLoading: true,
      loadingText: '提交�?..'
    });
  }

  /**
   * 获取申请详情
   * @param {number} applicationId 申请ID
   * @returns {Promise<Object>} 申请详情
   */
  async getApplicationDetail(applicationId) {
    return Request.get(`/teachers/applications/${applicationId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取课程分类列表（简化版�?   * @returns {Promise<Object>} 课程分类列表
   */
  async getCourseCategories() {
    return Request.get('/teachers/course-categories', {}, {
      service: this.service
    });
  }
}

module.exports = new TeacherService();
